'''
# encoding=utf-8

'''
import warnings

warnings.filterwarnings('ignore')
#显示中文
from pylab import *  #显示中文

mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib

matplotlib.rcParams['axes.unicode_minus'] = False

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
from sklearn.metrics import classification_report,roc_curve,roc_auc_score

# 根据身体测量特征，利用skearn中的高斯贝叶斯模型判断一个人是男性还是女性。以下是训练样本的数据集，预测样本身高为6英尺，体重为130磅，脚掌8英寸的某人，预测其性别并输出。
# 1.	读取数据
# a)	读取数据GaussianNB.txt（10分）
df = pd.read_csv('GaussianNB.txt'); print(df)
# b)	将数据且分为x，y（10分）
X, y = df[df.columns[:-1]], df[df.columns[-1]]; print(X,y)
# 2.	数据预处理
# a)	将y标签使用标签化进行处理（10分）
le = LabelEncoder()
y = le.fit_transform(y.values)
# 3.	模型训练
# a)	创建高斯贝叶斯（10分）
gnb = GaussianNB()
# b)	拟合数据（10分）
gnb.fit(X, y)
# 4.	模型效果评测
# a)	x = [[6,130,8]]预测数据结果（10分）
print(le.inverse_transform(gnb.predict([[6,130,8]])))
# b)	计算该模型准确率（10分）
print(gnb.score(X, y))
# c)	打印分类报告（10分）
y_pred = gnb.predict(X)
print(classification_report(y, y_pred))
# d)	绘制roc曲线（10分）
y_prob = gnb.predict_proba(X)
fpr, tpr, th = roc_curve(y, y_prob[:,1])
plt.plot(fpr, tpr)
plt.show()
# e)	输出auc数值（10分）
print(roc_auc_score(y, y_prob[:,1]))



